草庐IT

c++ - Clang、std::next、libstdc++ 和 constexpr-ness

全部标签

c++ - 如果我将类声明为 const...而不是 constexpr,程序将无法运行?

这是我的程序:#includeclassDebug{public:constexprDebug(boolh):hw(h){}constexprboolany(){returnhw;}private:boolhw;};intmain(){constDebugx(true);constexprboolf=x.any();}这会引发错误“‘x’的值在常量表达式中不可用”。如果我更换constDebugx(true);与constexprDebugx(true);然后一切正常。我的印象是将constexpr放在对象定义之前与“隐式使该变量成为常量,同时验证它是常量表达式变量”同义。这对我来说表

c++ - std::string::reserve() 和 std::string::clear() 难题

这道题从一段代码开始,只是因为我觉得这样更容易看出我在追求什么:/*static*/voidUrl::Split(std::list&url,conststd::string&stringUrl){std::stringcollector;collector.reserve(stringUrl.length());for(autoc:stringUrl){if(PathSeparator==c){url.push_back(collector);collector.clear();//Sabotagesmyoptimizationwithreserve()above!}else{col

c++ - CUDA 设备代码中的 constexpr 数组

你能告诉我,有什么方法可以在设备代码中使用constexpr数组吗?根据“CudaCprogrammingguide7.0”,我对constexpr标量没有任何问题,但数组似乎无法编译。下面是一些例子:templateclassLatticeArrangement{};templateclassLatticeArrangement{public:staticconstexprdoublec[19]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};staticconstexprdoubled=19.0;__host____device__

c++ - {} 是传递给需要迭代器(代表某个容器的 std::end() )的函数的有效参数吗?

在boostdirectory_iteratorexample-howtolistdirectoryfilesnotrecursive(参见thisanswer)中是示例代码#include#include#include...usingnamespaceboost::filesystem;for(auto&entry:boost::make_iterator_range(directory_iterator(p),{})){std::cout(p是boost::filesystem::path类型。)在查看documentationformake_iterator_range时,我认

一文总结 C++ 常量表达式、constexpr 和 const

TLDR修饰变量的时候,可以把constexpr对象当作加强版的const对象:const对象表明值不会改变,但不一定能够在编译期取得结果;constexpr对象不仅值不会改变,而且保证能够在编译期取得结果。如果一个const变量能够在编译期求值,将其改为constexpr能够让代码更清晰易读。constexpr函数可以把运行期计算迁移至编译期,使得程序运行更快(但会增加编译时间)。但如果constexpr函数中存在无法在编译期求值的参数,则constexpr函数和普通一样在运行时求值,此时的返回值不是常量表达式。1.常量表达式和constexprC++11中引入了constexpr关键字。c

c++ - 为异质宽度的整数编写 std::min/std::max

我的C++程序使用不同宽度的无符号整数来表示对可以表示的数据的约束。例如,我有一个大小为uint64_t的文件,我希望使用大小为size_t的缓冲区以block的形式读取它。block是缓冲区大小和(剩余)文件大小中较小的一个:uint64_tfile_size=...;size_tbuffer_size=...;size_tchunk_size=std::min(buffer_size,file_size);但这失败了,因为std::min要求两个参数具有相同的类型,所以我必须向上转换然后再向下转换:size_tchunk_size=\static_cast(std::min(sta

当我用单引号括起一个字符串时,C++ std::cout 打印奇怪的字符

这个问题在这里已经有了答案:WhatdosinglequotesdoinC++whenusedonmultiplecharacters?(5个答案)关闭7年前。当我尝试std::cout我得到了11296,我知道我应该用","把它括起来,但为什么我会得到号码?

c++ - 使用带有参数包扩展和附加值的静态存储持续时间初始化 std::array

在询问时anotherquestion最近,在用参数包扩展后跟另一个元素初始化std::array时,我偶然发现了GCC的一些奇怪行为。我已经与Jarod42简要讨论过这个问题inthecommentsthere但我认为最好将其作为一个新问题提出。例如,考虑下面的代码,它应该提供一个实用程序make_array函数,该函数接受任意数量的参数并将它们std::forward发送到std::array初始化。前导标记参数选择数组是否应以默认构造的T(通过std::true_type选择)或不(通过std::选择)终止false_type).然后我创建一个整数数组,一次使用静态,一次使用自动

c++ - 排序 vector 上 std::lower_bound 的时间复杂度

我正在研究http://www.cplusplus.com/reference/algorithm/upper_bound/的std::upper_bound我发现这可能会在非随机访问迭代器上以线性时间运行。我需要将其用于排序vector。现在我不知道什么是非随机访问迭代器以及它是否会在排序后的vector上以对数时间运行。谁能帮我解决这个问题。 最佳答案 §23.3.6.1[vector.overview]/p1:Avectorisasequencecontainerthatsupportsrandomaccessiterator

c++ - Boost Asio SSL Stream lowest_layer() 和 next_layer() 之间的区别

文档似乎并没有说明太多:lowest_layer(),next_layer().它们之间有什么区别以及何时使用它们? 最佳答案 要回答这个问题,首先要记住的是boost::asio::ssl::stream是一个模板类。通常它看起来像boost::asio::ssl::stream.因此使用boost::asio::ip::tcp::socket实现.这将是boost::asio::ssl::stream的下一层.另一方面,lowest_layer始终是basic_socket(它在docs中有描述)。它有点模棱两可,尤其是当您在标